package com.shopping.service.impl;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Random;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.shopping.commons.response.DataGradResp;
import com.shopping.commons.response.MessageResp;
import com.shopping.commons.util.CommonCode;
import com.shopping.mapper.UserMapper;
import com.shopping.model.User;
import com.shopping.param.UserParam;
import com.shopping.response.UserResp;
import com.shopping.service.IUserService;

@Service
public class UserService implements IUserService{

	@Autowired
	private UserMapper userMapper;
	
	private SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	
	/**
	 * 
	 */
	public MessageResp insert(User param) {
		MessageResp resp=new MessageResp();
		Random r=new Random();
		//TODO:  手机号的验证  手机号不能重复
		User selectParam=new User();
		selectParam.setTel(param.getTel());
		selectParam.setDelflag(CommonCode.DELFLAG_NORMAL);
		selectParam.setStatus(CommonCode.STATUS_ONE);
		if(!userMapper.select(selectParam).isEmpty()){
			resp.setCode(CommonCode.FAIL);
			resp.setMsg("添加失败");
			return resp;
		}
		param.setUserid(r.nextInt(10000)+100000);//   100000-199999  之间的随机数
//		param.setUaccount("用户"+r.nextInt(10000)+100000);
		param.setDelflag(CommonCode.DELFLAG_NORMAL);
		param.setStatus(CommonCode.STATUS_ONE);
		param.setCreatedate(sdf.format(new Date()));
		if(userMapper.insertSelective(param)>0){
			//成功了
			resp.setCode(CommonCode.SUCCESS);
			resp.setMsg("注册成功");
			resp.setObj(param);
		}else{
			resp.setCode(CommonCode.FAIL);
			resp.setMsg("注册失败");
		}
		return resp;
	}

	public MessageResp update(User param) {
		MessageResp resp=new MessageResp();
		User entity=userMapper.selectByPrimaryKey(param.getUserid());
		if(entity==null){
			//没找到
			resp.setCode("9999");
			resp.setMsg("未找到修改项");
			return resp;
		}
		entity.setUname(param.getUname());
		entity.setUage(param.getUage());
		entity.setUsex(param.getUsex());
		entity.setTel(param.getTel());
		entity.setUaccount(param.getUaccount());
		entity.setUpwd(param.getUpwd());
		entity.setUimage(param.getUimage());
		entity.setAddress(param.getAddress());
		entity.setDelflag(param.getDelflag()==null?CommonCode.DELFLAG_NORMAL:param.getDelflag());
		entity.setStatus(param.getStatus()==null?CommonCode.STATUS_ONE:param.getStatus());
		
		//自动更新   更新的时间  和更新的人
		entity.setUpdatedate(sdf.format(new Date()));
		if(userMapper.updateByPrimaryKeySelective(entity)>0){
			//成功了
			resp.setCode("0000");
			resp.setMsg("修改成功");
		}else{
			resp.setCode("9999");
			resp.setMsg("修改失败");
		}
		return resp;
	}

	public MessageResp delete(Integer id) {//这边的其他接口是不用的， 因为    ，，，，其他接口不负责查询啊，，，就不用  返回 total 和 rows
	//  在实现类中写的任何   与 接口无关的方法，都是在Controller中 不可见的
		MessageResp resp=new MessageResp();
			//TODO:如果没有这个id怎么办
			User entity=userMapper.selectByPrimaryKey(id);
			if(entity==null){
				//没找到
				resp.setCode("9999");
				resp.setMsg("未找到删除项");
				return resp;
			}
			entity.setDelflag(CommonCode.DELFLAG_DELETE);
			entity.setUpdatedate(sdf.format(new Date()));//asf.pares("2015-10-10 10:10:10")
			if(userMapper.updateByPrimaryKeySelective(entity)>0){
				//成功了
				resp.setCode("0000");
				resp.setMsg("删除成功");
			}else{
				resp.setCode("9999");
				resp.setMsg("删除失败");
			}
			return resp;
	}

	public DataGradResp<User> select(UserParam param) {//现在先不做分页，也就是不理会上上传来的  pagesize和num ，另外，随便写一个total回去
		DataGradResp<User> resp=new DataGradResp<User>();
		//查询     可能有多个，可能是单个
		//如果前端没有传任何参数的话，delflag也要特殊处理下
		param.setDelflag(param.getDelflag()==null?"0":param.getDelflag());
		List<User> userList;
		try {
			userList = userMapper.select(param);//首先这里的查询没有错
		} catch (Exception e) {
			e.printStackTrace();
			resp.setCode("9999");
			resp.setMsg("查询失败");
			return resp;
		}
		resp.setCode("0000");
		resp.setMsg("查询成功");
//		resp.setObj(userList);
		resp.setRows(userList);
		//在这里查找了   他的总共的数量
		resp.setTotal(userMapper.count(CommonCode.DELFLAG_NORMAL));
		return resp;
	}
	
	
	
	
	
	
	
	
	///////////////////////以下是前台功能部分////////////////////////////
	
	
	
	
	
	/**
	 * 用户登录      
	 */
	public MessageResp login(UserParam param) {
		MessageResp resp=new MessageResp();
		//   验证用户名密码的合法性  非空  之类的
		//if(){ return resp}
		if(param.getSearchParam()==null|| param.getSearchParam().equals("")){
			resp.setCode(CommonCode.FAIL);
			resp.setMsg("请完善账号信息");
			return resp;
		}
		if(param.getUpwd()==null|| param.getUpwd().equals("")){
			resp.setCode(CommonCode.FAIL);
			resp.setMsg("密码不能为空");
			return resp;
		}
		
		//   匹配用户名密码
		param.setDelflag(CommonCode.DELFLAG_NORMAL);
		param.setStatus("1");
		//先将用户密码取出  ，然后找到用户对象后再进行匹配，  这样可以提供更好的用户交互体验
		String password=param.getUpwd();
		param.setUpwd(null);
		UserResp retUser = userMapper.login(param);
		if(retUser==null){//非此即彼
			//没有查到对应用户，不能登录
			resp.setCode(CommonCode.FAIL);
			resp.setMsg("登录失败，没有查到对应用户");//用户不存在 ，密码错误，用户被禁用
		}else if(!password.equals(retUser.getUpwd())){
			resp.setCode(CommonCode.FAIL);
			resp.setMsg("登录失败，用户名密码不匹配");//用户不存在 ，密码错误，用户被禁用
		}else{
			resp.setCode(CommonCode.SUCCESS);
			resp.setMsg("登录成功");//用户不存在 ，密码错误，用户被禁用
			resp.setObj(retUser);
		}
		//TODO:   将用户对象返回 ，并存到session
		return resp;
	}

	public MessageResp register(User param) {
		MessageResp resp=new MessageResp();
		MessageResp insertResult=this.insert(param);
		if(CommonCode.SUCCESS.equals(insertResult.getCode())){
			resp.setCode(CommonCode.SUCCESS);
			resp.setMsg("用户添加成功");
			resp.setObj(insertResult.getObj());
		}else{
			return insertResult;
		}
		return resp;
	}

	/**
	 * 这个是公共Service里面定义的查询，现在暂时不用了，
	 */
	@Deprecated
	public DataGradResp<User> select(User param) {
		// TODO Auto-generated method stub
		return null;
	}

	public MessageResp batchDelete(String ids) {
		MessageResp resp=new MessageResp();
		String[] idss=null;
		try {
			idss=ids.split(",");
		} catch (Exception e) {
			resp.setCode(CommonCode.FAIL);
			resp.setMsg("参数有误");
		}
		if(userMapper.batchDelete(idss)>0){
			resp.setCode(CommonCode.SUCCESS);
			resp.setMsg("删除成功");
		}else{
			resp.setCode(CommonCode.FAIL);
			resp.setMsg("删除失败");
		}
		return resp;
	}

}
